angular.module('smartOlwApp').controller('sedejornadajornadaCtrl', function($scope,smartOlwServices) { 
	var divMessages  			 = document.querySelector('#messageBox');
		divMessages.className 	 = "alert alert-info alert-dismissable";

	$scope.titulo_mensajes 		 = "Información!";
	$scope.descripcion_mensajes  = "En esta vista puede administrar el maestro de sedes por jornada";

	$scope.paises				 = [];
	$scope.departamentos		 = [];
	$scope.ciudades				 = [];
	$scope.nucleos 				 = []; 
	$scope.instituciones		 = [];
	$scope.sedes				 = [];
	$scope.jornadas				 = [];
	$scope.jornadas_sedes		 = [];
	
	
	$scope.grabar							= function(sedejornada) {
		//A través de este metodo puede programar como hace la validación de los datos del form...
		smartOlwServices.validateInfo(
			sedejornada,
			function(validacion) {
				return (validacion 				!= null && 
						validacion.scsedes 		!= null && 
						validacion.scjornadas	!= null);
			},
			function(validado) {
				try {
					var exito 						= function(respuesta) {
						try{
							var response 				= respuesta.data; 
							$scope.titulo_mensajes 		= response.codigo === 400 ? "Error!":"Información!";
							$scope.descripcion_mensajes = response.mensaje;
							divMessages.className 		= response.codigo === 400 ? "alert alert-danger alert-dismissable": "alert alert-info alert-dismissable";
						}catch(e){
							console.log(e.message);
						}
					};
					var error 						= function(respuesta) {
						$scope.titulo_mensajes 		= "Error!";
						$scope.descripcion_mensajes = "Se produjo un error al momento de grabar la jornada";
						divMessages.className 		= "alert alert-danger alert-dismissable";
						console.log(angular.toJson(respuesta));
					};
					
					var scsedes						= validado.scsedes;
					var scjornadas					= validado.scjornadas;
					
					validado.scsedes 				= $scope.buscarSede(scsedes);
					validado.scsedes				= $scope.sedes[validado.scsedes];
					validado.scjornadas 			= $scope.buscarElemento(scjornadas , $scope.jornadas);
					validado.cousuario 				= userSession;
					
					if(validado.scsedesjornadas === undefined || validado.scsedesjornadas === null) {
						smartOlwServices.sendPut(
							angular.toJson(validado),
							hostSmart+context+endPointSedeJornadas+methodSetSedeJornadas,exito,error
						);
					}
					else {
						smartOlwServices.sendPut(
							angular.toJson(validado),
							hostSmart+context+endPointSedeJornadas+methodEditSedeJornadas,exito,error
						);
					}
				}
				catch(e){
					$scope.titulo_mensajes 			= "Error!";
					$scope.descripcion_mensajes  	= "Se produjo un error al momento de guardar la jornada";
					divMessages.className 			= "alert alert-danger alert-dismissable";
				}
			},
			function() {
				$scope.titulo_mensajes 				= "Advertencia!";
				$scope.descripcion_mensajes  		= "Por favor, valide que ha llenado los datos obligatorios";
				divMessages.className 				= "alert alert-danger alert-dismissable";
			}
		);
		
	};
	
	$scope.consultar							= function(sedejornada) {
		try {
			var exito 							= function(respuesta) {
			   var lista						= angular.fromJson(respuesta.data);
			   	   $scope.jornadas_sedes 		= lista;
				if($scope.jornadas_sedes != null && $scope.jornadas_sedes.length > 0) {
				   $scope.descripcion_mensajes  = "Tenemos " + $scope.jornadas_sedes.length + " jornadas";
				}
				else {
				   $scope.titulo_mensajes 		= "Información!";
				   $scope.descripcion_mensajes 	= "No hay jornadas registradas";	
				}
				divMessages.className 			= "alert alert-success alert-dismissable";
			};
			
			var error 							= function(respuesta) {
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar las jornadas";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			sedejornada							= (sedejornada == null)?{}:sedejornada;
			var scsedes							= (sedejornada != null)?sedejornada.scsedes:null;
			var scjornadas						= (sedejornada != null)?sedejornada.scjornadas:null;
			
			var vscsedes						= scsedes;
			var vscjornadas						= scjornadas;
		
			if(scsedes != null) {
			   scsedes							= $scope.buscarSede(scsedes);
			   scsedes							= $scope.sedes[scsedes];
			   sedejornada.scsedes 				= scsedes;
			}
			if(scjornadas != null) {
			   scjornadas						= $scope.buscarElemento(scjornadas, $scope.jornadas);
			   sedejornada.scjornadas 			= scjornadas;
			}
			/*
			smartOlwServices.sendPost(
				angular.toJson(sedejornada),
				hostSmart+context+endPointSedeJornadas+methodGetSedeJornadas,exito,error
			);
			*/
			smartOlwServices.sendGet(
				hostSmart+context+endPointSedeJornadas+methodGetAllSedeJornadas,exito,error
			);
			
			sedejornada.scsedes					= vscsedes;
			sedejornada.scjornadas				= vscjornadas;
		}
		catch(e){
			$scope.titulo_mensajes 				= "Error!";
			$scope.descripcion_mensajes  		= "Se produjo un error al momento de consultar jornadas";
			divMessages.className 				= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.limpiar							= function(sedejornada) {
		$scope.departamentos		 		= [];
		$scope.ciudades				 		= [];
		$scope.nucleos 				 		= []; 
		$scope.instituciones		 		= [];
		$scope.sedes				 		= [];
		$scope.jornadas_sedes				= [];
	};
	
	$scope.seleccionar						= function(sedejornada) {
		var sedeObj							= angular.copy(sedejornada);
		//$scope.sedejornada.scjornadas		= sedeObj.scjornadas.scdatmestro;
		$scope.scpais						= sedeObj.scsedes.smScciudad.departamentodto.scpais.scpais;
		$scope.cargarDepartamentos();
		$scope.dsdepartamento				= sedeObj.scsedes.smScciudad.departamentodto.scdepartamento;
		$scope.cargarCiudades();
		$scope.scciudad						= sedeObj.scsedes.smScciudad.scciudad;
		$scope.cargarNucleos();
		$scope.nucleoeducativodto			= sedeObj.scsedes.smartInstitucion.nucleoeducativodto.scnucleoeducativo;
		$scope.cargarInstituciones();
		$scope.smartInstitucion				= sedeObj.scsedes.smartInstitucion.scinstitucion;
		$scope.cargarSedes();
		sedeObj.scsedes						= sedeObj.scsedes.smScsede;
	};
	
	$scope.eliminar							= function(sedejornada) {
		
	};
	
	
	$scope.cargarListaMaestros	 			= function() {
		var argumentos 			 			= arguments;
		var metodo				 			= argumentos[1];
		try{
			var exito 			 			= function(respuesta) {
				try{
					var mensaje				= (argumentos.length > 3)?argumentos[2]:"Se realizó la consulta con exito";
					var objeto				= respuesta.data;
					var lista				= angular.fromJson(objeto);
					var tipo				= (lista.length > 0)?"success":"success";
					metodo(lista);
				}catch(e){
					console.log(e.message);
				}
			};
			var error 						= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
		    
			var tipo						= argumentos[0];
			var maestro						= {
				maestrodto  : { scmaestro : tipo }
			};
			smartOlwServices.sendPost(
				angular.toJson(maestro),
				hostSmart+context+endPointMaestro+methodFiltrardatosmaestroxmaestro,exito,error
			);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};
	
	$scope.buscarPais 			= function(codigo) {
		return $scope.buscarItem(
				codigo, 
				$scope.paises,
				function(valor, item) {
					return (valor == item.scpais);
				});
	}
	
	$scope.buscarDepartamento 	= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.departamentos,
			function(valor, item) {
				return (valor == item.scdepartamento);
			});
	}
	
	$scope.buscarCiudad 		= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.ciudades,
			function(valor, item) {
				return (valor == item.scciudad);
			});
	}
	
	$scope.buscarNucleo  		= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.nucleos,
			function(valor, item) {
				return (valor == item.scnucleoeducativo);
			});
	}
	
	$scope.buscarInstitucion	= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.instituciones,
			function(valor, item) {
				return (valor == item.scinstitucion);
			});
	}
	
	$scope.buscarSede			= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.sedes,
			function(valor, item) {
				return (valor == item.smScsede);
			});
	}
	
	$scope.buscarElemento		= function(id,lista) {
		var posicion 			= $scope.buscarItem(id, lista,
			function(valor, item) {
				return (valor == item.scdatmestro);
			});
		return ((lista != null && lista.length > 0 && posicion != -1)?lista[posicion]:null);
	};
	
	$scope.buscarItem		  	= function() {
		var valor				= arguments[0];
		var lista				= arguments[1];
		var comparator			= arguments[2];
		var posicion			= -1;
		
		if(lista != null && lista.length > 0) {
			for(var index= 0; index < lista.length; index++) {
				if(comparator(valor, lista[index])) {
					posicion 	= index;
					break;
				}
			}
		}
		return posicion;
	};
	
	$scope.cargarPaises 		= function() {
		try{
			var exito 					= function(respuesta){
				try{
					var paises 			= angular.fromJson(respuesta.data);
					$scope.paises.push({dspais : 'Seleccionar' , copais : null});
					$.each(paises, function( index , pais ) {
						$scope.paises.push(pais);
				    });
				}catch(e){
					console.log(e.message);
				}
			};
			var error	 					= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de paises";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			smartOlwServices.sendGet(hostSmart+context+endPointPais+methodGetAllPais,exito,error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes 	= "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarDepartamentos 				= function() {
		var pais							= $scope.pais;
		var departamento 					= {scpais : {scpais : pais}};
		var postFunction					= (arguments.length > 1)?arguments[1]:null;
		try {
			var exito 						= function(respuesta){
				try{
					$scope.departamentos 	= [];
					var departamentos 		= angular.fromJson(respuesta.data);
					$scope.departamentos.push({dsdepartamento : 'Seleccionar' , scdepartamento : null});
					$.each(departamentos, function( index , departamento ) {
						$scope.departamentos.push(departamento);
				    });
					if(postFunction != null) {
					   postFunction();
					}
				}catch(e){
					console.log(e.message);
				}
			};
			var error 						= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de departamentos";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			smartOlwServices.sendPost(
				angular.toJson(departamento),
				hostSmart+context+endPointDepartamento+methodGetDepartamento,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarCiudades 					= function() {
		var indepart	  					= $scope.buscarDepartamento($scope.dsdepartamento);
		var cdepart		  					= $scope.departamentos[indepart];
		var ciudadDTO  	  					= {departamentodto : cdepart};
		var postFunction					= (arguments.length > 1)?arguments[1]:null;
		try{
			var exito 	  					= function(respuesta){
				try{
					$scope.ciudades 		= [];
					var ciudades 			= angular.fromJson(respuesta.data);
					$scope.ciudades.push({dsciudad : 'Seleccionar' , scciudad : null});
					$.each(ciudades, function( index , ciudad ) {
						$scope.ciudades.push(ciudad);
				    });
					if(postFunction != null) {
					   postFunction();
					}
				}catch(e){
					console.log(e.message);
				}
			};
			var error 						= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de ciudades";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			smartOlwServices.sendPost(
				angular.toJson(ciudadDTO),
				hostSmart+context+endPointCiudad+methodGetCiudad,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarNucleos					= function() {
		var nucleo							= {ciudaddto : $scope.scciudad};
		var postFunction					= (arguments.length > 1)?arguments[1]:null;
		try {
			var exito 						= function(respuesta) {
			   var lista					= angular.fromJson(respuesta.data);
			    $scope.nucleos 				= [];
			    $scope.nucleos.push({dsnucleoeducativo : 'Seleccionar' , scnucleoeducativo : null});
			    
				$.each(lista, function(index ,nucleo ) {
					$scope.nucleos.push(nucleo);
			    });
				if(postFunction != null) {
				   postFunction();
				}
			};
			var error 						= function(respuesta) {
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar nucleos";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			nucleo							= (nucleo == null)?{}:nucleo;
			var ciudaddto					= (nucleo != null)?nucleo.ciudaddto:null;
			var vciudaddto					= ciudaddto;
			if(ciudaddto != null) {
			   ciudaddto					= $scope.buscarCiudad(ciudaddto);
			   nucleo.ciudaddto 			= $scope.ciudades[ciudaddto];
			}
			smartOlwServices.sendPost(
				angular.toJson(nucleo),
				hostSmart+context+endPointNucleoEducativo+methodFiltrarnucleoseducativos,
				exito,
				error
			);
		}
		catch(e){
			$scope.titulo_mensajes 				= "Error!";
			$scope.descripcion_mensajes  		= "Se produjo un error al momento de consultar nucleos";
			divMessages.className 				= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.cargarInstituciones					= function() {
		var institucion							= {nucleoeducativodto : $scope.nucleoeducativodto};
		var postFunction						= (arguments.length > 1)?arguments[1]:null;
		try {
			var exito 							= function(respuesta) {
			   var lista						= angular.fromJson(respuesta.data);
			    $scope.instituciones 			= [];
			    $scope.instituciones.push({dsinstitucion : 'Seleccionar' , scinstitucion : null});
			    
				$.each(lista, function(index, institucion) {
					$scope.instituciones.push(institucion);
			    });
				if(postFunction != null) {
				   postFunction();
				}
			};
			var error 							= function(respuesta) {
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes 	= "Se produjo un error al momento de consultar instituciones";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			institucion							= (institucion == null)?{}:institucion;
			var nucleoeducativodto				= (institucion != null)?institucion.nucleoeducativodto:null;
			var vnucleoeducativodto				= nucleoeducativodto;
			if(nucleoeducativodto != null) {
			   nucleoeducativodto				= $scope.buscarNucleo(nucleoeducativodto);
			   institucion.nucleoeducativodto	= $scope.nucleos[nucleoeducativodto];
			}
			smartOlwServices.sendPost(
				angular.toJson(institucion),
				hostSmart+context+endPointInstitucion+methodGetInstitucion,
				exito,
				error
			);
		}
		catch(e){
			$scope.titulo_mensajes 				= "Error!";
			$scope.descripcion_mensajes  		= "Se produjo un error al momento de consultar instituciones";
			divMessages.className 				= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.cargarSedes							= function() {
		var sede								= {smartInstitucion : $scope.smartInstitucion};
		var postFunction						= (arguments.length > 1)?arguments[1]:null;
		try {
			var exito 							= function(respuesta) {
			   var lista						= angular.fromJson(respuesta.data);
			    $scope.sedes 					= [];
			    $scope.sedes.push({smDssede : 'Seleccionar' , smScsede : null});
				$.each(lista, function(index, sede) {
					$scope.sedes.push(sede);
			    });
				if(postFunction != null) {
				   postFunction();
				}
			};
			var error 							= function(respuesta) {
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes 	= "Se produjo un error al momento de consultar sedes";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			sede								= (sede == null)?{}:sede;
			var smartInstitucion				= (sede != null)?sede.smartInstitucion:null;
			var vsmartInstitucion				= smartInstitucion;
			if(smartInstitucion != null) {
			   smartInstitucion					= $scope.buscarInstitucion(smartInstitucion);
			   sede.smartInstitucion			= $scope.instituciones[smartInstitucion];
			}
			smartOlwServices.sendPost(
				angular.toJson(sede),
				hostSmart+context+endPointSede+methodGetSede,
				exito,
				error
			);
		}
		catch(e){
			$scope.titulo_mensajes 				= "Error!";
			$scope.descripcion_mensajes  		= "Se produjo un error al momento de consultar instituciones";
			divMessages.className 				= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.cargarPaises();
	
	$scope.cargarListaMaestros(
		6, 
		function(lista) {
			$scope.jornadas		 = lista;
	});
	
});